package com.itheima.d5_data_stream;

import java.io.DataOutputStream;
import java.io.FileOutputStream;

/**
 * 目标：数据输出流。
 *
 *IO流的体系
 *  字节流：          抽象类          实现类(原始流/低级流)     实现类(包装流/处理流)
 *    字节输入流    InputStream      FileInputStream  字节缓冲输入流:BufferedInputStream                        数据输入流：DataInputStream
 *    字节输出流    OutputStream     FileOutputSteam  字节缓冲输出流:BufferedOutputStream  打印流：PrintStream   数据输出流：DataOutputStream
 *
 *  字符流：               实现类(原始流/低级流) 实现类(包装流/处理流)
 *    字符输入流    Reader  FileReader   字符缓冲输入流:BufferedReader    字符输入转换流：InputStreamReader
 *    字符输出流    Writer  FileWriter   字符缓冲输出流:BufferedWriter    字符输出转换流：OutputStreamWrite   打印流：PrintWriter
 *
 *
 *  *  PrintStream和PrintWriter的区别
 *  * 打印数据的功能上是一模一样的：都是使用方便，性能高效（核心优势）
 *  * PrintStream继承自字节输出流OutputStream，因此支持写字节数据的方法。
 *  * PrintWriter继承自字符输出流Writer，因此支持写字符数据出去。
 *
 *
 *  DataOutputStream(数据输出流)：允许把数据和其类型一并写出去。
 *          构造器
 *  public DataOutputStream(OutputStream out)       创建新数据输出流包装基础的字节输出流
 *          方法
 *  public final void writeByte (int v) throws IOException   将byte类型的数据写入基础的字节输出流
 *  public final void writeInt (int v) throws IOException    将int类型的数据写入基础的字节输出流
 *  public final void writeDouble(Double v) throws IOException  将double类型的数据写入基础的字节输出流
 *  public final void writeUTF(String str) throws IOException   将字符串数据以UTF-8编码成字节写入基础的字节输出流
 *  public void write(int/byte[]/byte[]一部分)                   支持写字节数据出去
 *
 *
 *  DataInputStream(数据输入流):用于读取数据输出流写出去的数据。
 *          构造器
 *  public DataInputStream(InputStream is)          创建新数据输入流包装基础的字节输入流
 *          方法
 *  Public final byte readByte () throws IOException        读取字节数据返回
 *  public final int readInt () throws IOException          读取int类型的数据返回
 *  public final double readDouble() throws IOException     读取double类型的数据返回
 *  public final String readUTF() throws IOException        读取字符串数（UTF-8）据返回
 *  public int readInt()/read(byte[])                       支持读字节数据进来
 *
 *
 */
public class DataOutputStreamTest1 {
    public static void main(String[] args) {
        try (
                // 1、创建一个数据输出流包装低级的字节输出流
                DataOutputStream dos =
                        new DataOutputStream(new FileOutputStream("Day09Io-App2/src/itheima10out.txt"));
                ){
            //存入进去的样子看起来是乱码，其实这是特殊的数据存储方式，存这个数据和数据对应的类型。并且也不是为了观看的，是为了下次方便读取出来
            dos.writeInt(97);
            dos.writeDouble(99.5);
            dos.writeBoolean(true);
            dos.writeUTF("黑马程序员666！");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
